#ifndef INFINITY_GAME_MODE_MANAGER_H
#	define INFINITY_GAME_MODE_MANAGER_H

#include "base/singleton.h"
#include "gamemode.h"


namespace infinity {

class GameModeManager
:	public dw::base::Singleton< GameModeManager >
{

public : //! @name Construction & Destruction
	//! @{
	GameModeManager();
	virtual ~GameModeManager();
	//! @}

public : //! @name Commands
	//! @{
	void install();
	void update(const dw::float32 deltaT);
	void render();
	void renderDebug();
	void term();

	void addGameMode(GameMode * gamemode);
	void removeGameMode(GameMode * gamemode);
	//! @}

private : //! @name Types definitions
	//! @{
	typedef std::vector< GameMode* > GameModes;
	//! @}

private : //! @name Data
	//! @{
	GameModes m_gamemodes;

};

} // namespace infinity

#endif // !INFINITY_GAME_MODE_MANAGER_H
